#include <REGX52.H>
#include "Delay.h"

/**
  * @brief  矩阵键盘读取按键键码 <介绍>
  * @param  无 <参数>
  * @retval KeyNumber 按下按键的键码值 <返回值>
         如果按键按下不放，程序会停留在此函数，松手的一瞬间返回按键键码，没有按键按下时，返回0
  */


unsigned char MatrixKey() //扫描键盘用于检测那个键被按下
{
	unsigned char KeyNumber=0; //局部变量使用前需要赋初始值
	
	P1=0xFF;
	P1_3=0;
	if(P1_7==0){Delay(20); while(P1_7==0);Delay(20); KeyNumber=1;}
	//该模块只是输出了此按键，并不是直接赋予操作
	//这样可以使得按键和按键彼此独立开，增高代码的内聚性
	if(P1_6==0){Delay(20); while(P1_6==0);Delay(20); KeyNumber=5;}
	if(P1_5==0){Delay(20); while(P1_5==0);Delay(20); KeyNumber=9;}
	if(P1_4==0){Delay(20); while(P1_4==0);Delay(20); KeyNumber=13;}
	
	P1=0xFF;
	P1_2=0;
	if(P1_7==0){Delay(20); while(P1_7==0);Delay(20); KeyNumber=2;}
	if(P1_6==0){Delay(20); while(P1_6==0);Delay(20); KeyNumber=6;}
	if(P1_5==0){Delay(20); while(P1_5==0);Delay(20); KeyNumber=10;}
	if(P1_4==0){Delay(20); while(P1_4==0);Delay(20); KeyNumber=14;}
	
	P1=0xFF;
	P1_1=0;
	if(P1_7==0){Delay(20); while(P1_7==0);Delay(20); KeyNumber=3;}
	if(P1_6==0){Delay(20); while(P1_6==0);Delay(20); KeyNumber=7;}
	if(P1_5==0){Delay(20); while(P1_5==0);Delay(20); KeyNumber=11;}
	if(P1_4==0){Delay(20); while(P1_4==0);Delay(20); KeyNumber=15;}
	
	P1=0xFF;
	P1_0=0;
	if(P1_7==0){Delay(20); while(P1_7==0);Delay(20); KeyNumber=4;}
	if(P1_6==0){Delay(20); while(P1_6==0);Delay(20); KeyNumber=8;}
	if(P1_5==0){Delay(20); while(P1_5==0);Delay(20); KeyNumber=12;}
	if(P1_4==0){Delay(20); while(P1_4==0);Delay(20); KeyNumber=16;}
	
	return KeyNumber;
}
